// uni-app框架覆盖文件 - 解决"Cannot read properties of undefined (reading 'height')"错误

console.log('加载uni-app框架覆盖文件...');

// 在全局对象上添加一个安全的height属性访问包装器
globalThis.__safeHeightAccess = {
  // 获取元素高度的安全方法
  getHeight: function(element, fallback = 0) {
    if (!element) {
      console.warn('尝试获取undefined/null元素的高度，返回默认值:', fallback);
      return fallback;
    }
    
    try {
      // 尝试多种高度获取方式
      if (element.offsetHeight !== undefined) {
        return element.offsetHeight;
      } else if (element.clientHeight !== undefined) {
        return element.clientHeight;
      } else if (element.scrollHeight !== undefined) {
        return element.scrollHeight;
      }
      return fallback;
    } catch (error) {
      console.warn('获取元素高度时出错:', error.message);
      return fallback;
    }
  },
  
  // 获取窗口高度的安全方法
  getWindowHeight: function() {
    try {
      if (typeof window !== 'undefined' && window.innerHeight !== undefined) {
        return window.innerHeight;
      }
      return 0;
    } catch (error) {
      console.warn('获取窗口高度时出错:', error.message);
      return 0;
    }
  },
  
  // 获取文档高度的安全方法
  getDocumentHeight: function() {
    try {
      if (typeof document !== 'undefined') {
        const doc = document.documentElement || document.body;
        if (doc && doc.scrollHeight !== undefined) {
          return doc.scrollHeight;
        }
      }
      return 0;
    } catch (error) {
      console.warn('获取文档高度时出错:', error.message);
      return 0;
    }
  }
};

// 尝试覆盖可能导致问题的uni-app内部方法
if (typeof UniApp !== 'undefined') {
  // 保存原始的getSystemInfoSync方法
  const originalGetSystemInfoSync = UniApp.getSystemInfoSync;
  
  // 覆盖getSystemInfoSync方法
  UniApp.getSystemInfoSync = function() {
    try {
      const result = originalGetSystemInfoSync.apply(this, arguments);
      // 确保height相关属性存在
      if (result.windowHeight === undefined) {
        result.windowHeight = __safeHeightAccess.getWindowHeight();
        console.log('已补充缺失的windowHeight属性');
      }
      if (result.screenHeight === undefined) {
        result.screenHeight = __safeHeightAccess.getWindowHeight();
        console.log('已补充缺失的screenHeight属性');
      }
      return result;
    } catch (error) {
      console.error('getSystemInfoSync出错，返回安全的默认值:', error);
      // 返回一个安全的默认值
      return {
        windowHeight: __safeHeightAccess.getWindowHeight(),
        screenHeight: __safeHeightAccess.getWindowHeight(),
        platform: 'devtools',
        model: 'Unknown',
        pixelRatio: 1,
        windowWidth: 375,
        screenWidth: 375,
        statusBarHeight: 44,
        language: 'zh_CN',
        version: '1.0.0'
      };
    }
  };
  
  console.log('已覆盖UniApp.getSystemInfoSync方法');
}

// 为document.body添加一个安全检查
if (typeof document !== 'undefined' && !document.body) {
  // 创建一个虚拟的body元素
  const dummyBody = document.createElement('body');
  dummyBody.style.height = '100vh';
  dummyBody.style.width = '100vw';
  document.appendChild(dummyBody);
  console.log('已创建虚拟body元素，防止document.body为undefined');
}

// 注意：Object.prototype.height属性已在index.html中定义
// 这里不再重复定义，避免冲突
console.log('Object.prototype.height属性已在index.html中定义');

console.log('uni-app框架覆盖文件加载完成');